	.section	__TEXT,__text,regular,pure_instructions
	.build_version ios, 14, 0	sdk_version 14, 0
	.globl	_main                   ; -- Begin function main 类似.globl .section 这种被称为汇编器指令，用于告知汇编器相关信息或进行特定操作
	.p2align	2
_main:                                  ; @main
	.cfi_startproc				; cfi = call frame information 也叫call stack 调用栈，调用函数时需要将一些信息保存到栈中 startproc 应该是start process开始流程
; %bb.0:
	sub	sp, sp, #48             ; =48 开辟Ox40大小的栈空间, 下移sp指针分配栈空间
	stp	x29, x30, [sp, #32]     ; 16-byte Folded Spill 保存当前x29(帧指针寄存器fr，指向栈底)、x30(链接寄存器LR) 
								; stp 将x29和x30寄存器的值写入到sp+0x32的内存中
	add	x29, sp, #32            ; =32 fr = sp + 0x30，将fr移动到新的栈帧，用于抬高栈底；
	.cfi_def_cfa w29, 16		; ?
	.cfi_offset w30, -8			; 表示 w30 相对原来值的偏移量
	.cfi_offset w29, -16		; 表示 w29 相对原来值的偏移量
	stur	wzr, [x29, #-4]		; 将 32位零寄存器的值写入 fr-0x4 的内存地址中 应该是置零操作
	stur	w0, [x29, #-8]		; 将 w0 32位通用寄存器的值写入 fr-0x8 的内存地址中 保存 w0 寄存器
	str	x1, [sp, #16]			; 保存 x1 寄存器
	str	x2, [sp, #8]			; 保存 x2 寄存器 
	bl	_objc_autoreleasePoolPush	; 跳转到oc的自动引用池开始
	adrp	x8, l_.str@PAGE			; 获取字符串标签所在的页的地址
	add	x8, x8, l_.str@PAGEOFF		; PAGEOFF 表示标签地址对应页地址的偏移，经过汇编器汇编后会将字符串标签汇编为字符串所存在的地址，让程序可以定位到字符串
									; 此时 x8 应该保存了字符串hello world 的内存地址
	str	x0, [sp]                ; 8-byte Folded Spill 将 x0 写入到sp指向的内存地址中
	mov	x0, x8					; 将 x8 即字符串的内存地址保存到 x0 中，接下来调用_printf函数
	bl	_printf					; 调用_printf函数，将 x0 作为_printf函数的第一个参数传入
	stur	wzr, [x29, #-4]		; 置零操作？
	ldr	x1, [sp]                ; 8-byte Folded Reload  取sp栈顶的数据存入到 x1 中
	mov	x0, x1					; 将 x1 保存到 x0 中
	bl	_objc_autoreleasePoolPop	; 跳转到oc自动引用池结束
	ldur	w0, [x29, #-4]			; 将 x29 - 0x4 的内存地址所指向的数据读取到 w0
	ldp	x29, x30, [sp, #32]     ; 16-byte Folded Reload 还原 x29 fr 和 x30 lr 寄存器，和开始时候的stp相对应
	add	sp, sp, #48             ; =48 开始的时候开辟了0x48 大小的栈空间，这时候释放所占用的栈空间
	ret							; ret main函数返回
	.cfi_endproc				; 调用栈 end process
                                        ; -- End function
	.section	__TEXT,__cstring,cstring_literals
l_.str:                                 ; @.str 类似_main:或l_.str: 的被称为标签，用于辅助定位代码或者资源地址，以便于开发者理解和记忆
	.asciz	"Hello world!\n"

	.section	__DATA,__objc_imageinfo,regular,no_dead_strip
L_OBJC_IMAGE_INFO:
	.long	0
	.long	64

.subsections_via_symbols
